package com.cloud.core.utils;

import com.cloud.business.model.commonvm.LngAndLat;

import java.awt.geom.Path2D;
import java.util.List;

/**
 * redis公用方法
 * Copyright: Copyright (C) 2020 DLANGEL, Inc. All rights reserved.
 * Company: 大连安琪科技有限公司
 *
 * @author Rex
 * @since 2020/4/13 14:34
 */
public class Path2DUtils {


    /**
     * 使用Path2D创建一个多边形
     *
     * @param polygon 经纬度 集合
     * @return 返回Path2D.Double
     */
    private static Path2D.Double create(List<LngAndLat> polygon) {

        //创建path2D对象

        Path2D.Double generalPath = new Path2D.Double();

        //获取第一个起点经纬度的坐标

        LngAndLat first = polygon.get(0);

        //通过移动到以double精度指定的指定坐标，把第一个起点添加到路径中

        generalPath.moveTo(first.getLng(), first.getLat());

        //把集合中的第一个点删除防止重复添加

        polygon.remove(0);

        //循环集合里剩下的所有经纬度坐标

        for (LngAndLat d : polygon) {

            //通过从当前坐标绘制直线到以double精度指定的新指定坐标，将路径添加到路径。

            //从第一个点开始，不断往后绘制经纬度点

            generalPath.lineTo(d.getLng(), d.getLat());

        }

        // 最后要多边形进行封闭，起点及终点

        generalPath.lineTo(first.getLng(), first.getLat());

        //将直线绘制回最后一个 moveTo的坐标来关闭当前子路径。

        generalPath.closePath();

        return generalPath;

    }

    /**
     * 判断点是否在区域内
     *
     * @param longitude 经度
     * @param latitude  纬度
     * @return 返回true跟false
     */
    public static boolean isPoint(List<LngAndLat> list, double longitude, double latitude) {
        Path2D path2D = create(list);
        //true如果指定的坐标在Shape边界内; 否则为false
        return path2D.contains(longitude, latitude);
    }


}
